// pages/function/sub/login-all.js
const APP = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //逻辑变量
    dataAuthType:[
      {txt:'请选择身份',val:'0'},{txt:'学生',val:'1'},{txt:'老师',val:'2'}
    ],
    dataAuthIdx:0,
    dataSubmitText:'登录',
    dataSubmitDisabled:true,
    dataWechatAction:'wxlogin', //操作（选项： wxlogin 》微信登录； bindlogin 》绑定登录；）
    dataTmpAuthInfo:{},//临时登录信息
    dataBackFlag:0,//返回继续操作（选项：0》不返回；1》仅返回；2》返回且刷新；）
    //微信变量
    canIUseGetUserProfile:true,
    dataWxJsCode:'',
    dataWxEncryptedData: '',
    dataWxIv: '',
    dataWxRawData:'',
    dataWxUserInfo:{},//性别：0》未知；1》男；2》女；
    dataWxSignature:'',
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let _this = this;
    //刷新标识
    if(options.refresh){
      //刷新标识：refresh=1
      _this.data.dataBackFlag = parseInt(options.refresh);
    }
    //操作检测
    if(wx.getUserProfile){
      _this.setData({
        canIUseGetUserProfile:true
      });
    };
    _this.doChkLogin();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let _this = this;
    
    _this.doWxLogin(null);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    //打开登录提示
    APP.globalData.wxmp_login_enabled = true;
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  // ====================【逻辑区域】====================
  bindAuthChange: function(event){
    this.setData({
      dataAuthIdx:event.detail.value
    });
  },
  
  bindSubmitForm:function(eventhandle){
    let _this = this;
    let formvalues = eventhandle.detail.value;

    if (formvalues.account.length != 11) {
      APP.apptool.showToastInfo('请输入11位手机号码');
      return;
    }
    if (formvalues.password.length < 8 || formvalues.password.length>12){
      APP.apptool.showToastInfo('请输入8至12位有效字符的密码！');
      return;
    }
    if (_this.data.dataAuthIdx == 0){
      APP.apptool.showToastInfo('请选择身份！');
      return;
    }
    //禁用操作
    _this.setData({
      dataSubmitDisabled: true
    });
    APP._post('/miniprogram/BasicLogin/personalLogin', {
      username:formvalues.account,
      userpwd:formvalues.password,
      usertype:_this.data.dataAuthIdx,
    }, null, function (res) {
      //执行成功
      if (res.caCode === APP.appconfig.fwcode.successed) {
        let resData = res.caData;
        if(resData.bind_wechat){
          _this.data.dataTmpAuthInfo = resData;
          //绑定登录
          _this.data.dataWechatAction = 'bindlogin';
          //绑定微信
          if(wx.getUserProfile){
            wx.getUserProfile({
              lang:'zh_CN',
              desc: '用于微信快捷登录',
              success:function(res){
                _this.setData({
                  dataWxRawData:res.rawData,
                  dataWxIv:res.iv,
                  dataWxEncryptedData:res.encryptedData,
                  dataWxSignature:res.signature,
                  dataWxUserInfo:res.userInfo
                },function(){
                  _this.doThirdLogin(null);
                })
              }
            });
          }else{
            wx.getUserInfo({
              lang:'zh_CN',
              withCredentials:true,
              success:function(res){
                _this.setData({
                  dataWxRawData:res.rawData,
                  dataWxIv:res.iv,
                  dataWxEncryptedData:res.encryptedData,
                  dataWxSignature:res.signature,
                  dataWxUserInfo:res.userInfo
                },function(){
                  _this.doThirdLogin(null);
                });
              }
            });
          }
        }else{
          //直接登录
          APP.appauth.setUserCacheData(resData);
          _this.doNavigateUrl();
        }
      } else {
        APP.apptool.showToastInfo(res.caMsg);
      }
    }, function (res) {
      //执行失败
    }, function (res) {
      //执行完成
      //恢复操作
      _this.setData({
        dataSubmitDisabled: false
      });
    });
  },
  doAutoLogin:function(){
    let _this = this;

    APP._post('/miniprogram/BasicLogin/personalAutoLogin',{}, null, function (res) {
      //执行成功
      if (res.caCode === APP.appconfig.fwcode.successed) {
        APP.appauth.setUserCacheData(res.caData);
        _this.doNavigateUrl();
      } else {
        APP.apptool.showToastInfo(res.caMsg);
        //清除缓存
        wx.clearStorage();
        wx.clearStorageSync();
        //恢复操作
        _this.setData({
          dataSubmitText:'登录'
        });
      }
    }, function (res) {
      //执行失败
    }, function (res) {
      //执行完成

      //恢复操作
      _this.setData({
        dataSubmitDisabled: false
      });
    });
  },
  doChkLogin:function(){
    let _this = this;
    if(APP.appauth.checkAuth()){
      _this.setData({
        dataSubmitDisabled: true,
        dataSubmitText:'登录中...'
      },function(){
        _this.doAutoLogin();
      });
    }else{
      //清除缓存
      wx.clearStorage();
      wx.clearStorageSync();
      //恢复操作
      _this.setData({
        dataSubmitDisabled: false,
        dataSubmitText:'登录'
      });
    }
  },

  getUserProfile:function(event){
    let _this = this;

    //快捷登录
    _this.data.dataWechatAction = 'wxlogin';

    wx.getUserProfile({
      lang:'zh_CN',
      desc: '用于微信快捷登录',
      success:function(res){
        _this.setData({
          dataWxRawData:res.rawData,
          dataWxIv:res.iv,
          dataWxEncryptedData:res.encryptedData,
          dataWxSignature:res.signature,
          dataWxUserInfo:res.userInfo
        },function(){
          _this.doThirdLogin(null);
        })
      }
    });
  },

  getUserInfo:function(event){
    let _this = this;

    //快捷登录
    _this.data.dataWechatAction = 'wxlogin';

    wx.getUserInfo({
      lang:'zh_CN',
      withCredentials:true,
      success:function(res){
        _this.setData({
          dataWxRawData:res.rawData,
          dataWxIv:res.iv,
          dataWxEncryptedData:res.encryptedData,
          dataWxSignature:res.signature,
          dataWxUserInfo:res.userInfo
        },function(){
          _this.doThirdLogin(null);
        });
      }
    });
  },

  doWxLogin:function(callback){
    let _this = this;

    wx.login({
      success(res) {
        if (res.code) {
          //用户登录凭证（有效期五分钟）
          _this.setData({
            dataWxJsCode: res.code
          },function(){
            callback && callback();
          });
        } else {
          APP.applog.error(res.errMsg);
        }
      }
    });
  },

  doThirdLogin:function(completedcallback){
    let _this = this;
    
    _this.doWxLogin(function(){
      let param = {
        action:_this.data.dataWechatAction,
        js_code:_this.data.dataWxJsCode,
        raw_data: encodeURI(_this.data.dataWxRawData),//有汉字必须转义
        signature:_this.data.dataWxSignature
      };
      //登录类型
      if('bindlogin' == _this.data.dataWechatAction){
        param.auth_id = _this.data.dataTmpAuthInfo.auth_id;
        param.auth_type = _this.data.dataTmpAuthInfo.auth_type;
        param.auth_token = _this.data.dataTmpAuthInfo.auth_token;
      }

      APP._post('/miniprogram/BasicLogin/personalWxlogin',param, null, function (res) {
        //执行成功
        if (res.caCode === APP.appconfig.fwcode.successed) {
          // APP.apptool.showToastInfo(res.caMsg,null,2000,function(res){
          // });
          APP.appauth.setUserCacheData(res.caData);
          _this.doNavigateUrl();
        } else {
          APP.apptool.showToastInfo(res.caMsg);
        }
      }, function (res) {
        //执行失败
      }, function (res) {
        //执行完成
        completedcallback && completedcallback();
      });
    });
  },
  clickForgetpwd:function(event){
    wx.navigateTo({
      url: '/pages/function/sub/forgetpwd',
    })
  },
  //跳转控制
  doNavigateUrl:function(){
    let _this = this;
    if(_this.data.dataBackFlag>0){
      APP.apptool.showToastInfo('登录成功，请继续操作！', null, 2000, function (res) {
        APP.apptool.navigateBackPage(1, function (targetPage) {
          if(2 == _this.data.dataBackFlag){
            //需刷新数据面，必须实现refreshPage()方法
            targetPage.refreshPage();
          }
        });
      });
    }else{
      wx.reLaunch({
        url: '/pages/index/index',
      });
    }
  }
})